package cn.demoncat.util.word.poi_tl;

import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import org.apache.poi.xwpf.usermodel.XWPFTable;

/**
 * 合并行的 TableRenderPolicy
 *
 * @author 延晓磊
 * @since 2023年12月27日
 */
public class MergeRowTableRenderPolicy extends DynamicTableRenderPolicy {

    // 起始列，从0开始
    private final int col;
    // 起始行，从0开始
    private final int row;
    // 合并的行数：正数 row + num, 负数 table.rows.size -1 + num，零 table.rows.size -1
    private final int num;

    /**
     * 构建
     *
     * @param col   起始列，从0开始
     * @param row   起始行，从0开始
     * @param num   合并的行数：正数 row + num, 负数 table.rows.size -1 + num，零 table.rows.size -1
     */
    public MergeRowTableRenderPolicy(int col, int row, int num) {
        this.col = col;
        this.row = row;
        this.num = num;
    }

    @Override
    public void render(XWPFTable table, Object data) {
        int to;
        if (num == 0) {
            // 结尾行
            to = table.getRows().size() - 1;
        }else if (num > 0) {
            // 开始行 + num行
            to = row + num;
        }else{
            // 结尾行 - num行
            to = table.getRows().size() - 1 + num;
        }
        if (to > col) {
            // 合并
            TableTools.mergeCellsVertically(table, col, row, to);
        }
    }
}
